﻿using System;
using System.Collections.Generic; // gerir notkun á sniðmátum möguleg
using System.Linq;
using System.Web;

/*
* University of Reykjavík
* Brjóstagjöf.is is the product of first-year practical programming course
* for computer science students at said university
*
* URL: http://code.google.com/p/scags 
* Authors: 
* Ástvaldur Sigurðsson
* Guðjón Jónsson
* Kristín Inga Vigfúsdóttir
* Steinar Bragi Sigurðsson
* Sveinn Ernstsson
*/

namespace skags.Models
{
/* Gagnagrunnsklasi fyrir þau föll sem eiga ekki heima í hinum repo-unum. */
    public class DBRepository
    {
        // tilvik af gagnagrunni (vísun í gagnagrunn) búin til
        DBDataContext db = new DBDataContext();

        /* 
         * Útfaert í baeði HomeController og SearchController
         */
        public DBRepository( )
        {
            db.Log = new DebuggerWriter();
        }

        /*
         * Uppfaerir heimsóknir á greinar/heimasíðu
         * Notað í HomeController
         */ 
        public void UpdateViewCount(string controller, string view) //Þetta vikar
        {
           
            db.usp_UpdateViewCount(controller, view);
        }

        public int? Viewcounter()
        {
            return (from p in db.PageViews
                    select p.ViewCounter).First();
        }

        /* 
         * Fall sem leitar af fréttum og greinum út frá leitarstrengi 
         * Notað í HomeController og SearchController
         */
        public SearchResultViewModel Search(string inSearchString)
        {
            var resultA = from s in db.Articles
                          where
                          (
                            s.Title.Contains(inSearchString)
                          )
                          orderby s.ReadCount
                          select s;
            var resultN = from s in db.News
                          where
                          (
                            s.Title.Contains(inSearchString)
                          )
                          orderby s.ReadCount
                          select s;

            var resultL = from s in db.Links
                          where
                          (
                            s.Title.Contains(inSearchString)
                          )
                          orderby s.ID
                          select s;

            var resultF = from s in db.ForumThreads
                          where
                          (
                            s.Title.Contains(inSearchString)
                          )
                          orderby s.ID
                          select s;

            return new SearchResultViewModel { Article = resultA, News = resultN, Links = resultL, Forum = resultF };
        }

        // Fall sem sker texta niður í eitthvað ákveðið
        public static String LimitWords(String input, string Morelink = "")
        {
            int max = 61; // Hámarksstafir

            // Skiptum textanum í orð, hámark max stafir
            String[] words = input.Split(new char[] { ' ' }, max);

            // Ef við náum hámarkinu, setjum við síðasta orðið sem "Lesa meira"
            if (words.Length == max)
                words[max-1] = Morelink != "" ? "... <p><a href=\"" + Morelink + "\">Lesa meira</a></p>" : "...";
            else
                return input; // Nær ekki hámarki, birtum allan textann

            // Búum til nýja strenginn
            String output = String.Join(" ", words);
            return output;
        }


    }
    /*
     * ViewModel sem sameinar leitarniðurstöður frétta og greina.
     * Notað til að leita í Article-, Forum-, Links-, News- og SearchController
     */
    public class SearchResultViewModel
    {
        public  IQueryable<Article> Article { get; set; }
        public  IQueryable<New> News { get; set; }
        public IQueryable<Link> Links { get; set; }
        public IQueryable<ForumThread> Forum { get; set; }
    }
}